Sending Query fields to CGI,ISAPI


You can send a query or parameters to the CGI from your browser at
Address bar such
as:

//localhost/cgi/Para.exe?Test

In this case
Test will be passed as a Query to Para.exe application. Another example
is:

//localhost/cgi/Para.exe?Name=Motaz

In this case
Name=Motaz will be passed.

Example:

- Start new CGI server application and add new item in at
WebModule1 (Action).

- Click
Save All button then name the WebModule as ParaF.pas, and the project as Para.dpr.

- At
WebActionItem1 OnAction event write:

 Response.Content:=
'Your query is: ' + Request.
Query;

This will shows the query that sent from the browser. For example :

//localhost/cgi/Para.exe?Test

Will display:

 Your query is: Test

//localhost/cgi/Para.exe?Name=Motaz

Will display:

 Your query is: Name=Motaz

Reading
Query property of Request object is suitable for short queries and single
values, but if we want to pass many values we must use
QueryFields property. Below
example show you how to use
QueryFields to get all passed variable names and values:

- At
OnAction write:

var
i: Integer;
N: string;
V: string;
begin
(*** Get variables name ***)
 for i:= 0 to Request.QueryFields.Count - 1 do
  N:= N + Request.QueryFields.Names[i] + ', ';

(*** Get variables value ***)
 with Request.QueryFields do
  for i:= 0 to Count - 1 do
    V:= V + Values[Names[i]] + ', ';

Response.Content:= 'Variables name: ' +
  N + '

Variables value: '
   + V + '
';


- Test this example with this parameters:

http://localhost/cgi/para.exe?Name=Motaz&Country=Sudan&Age=24

The result at your browser would be:

 Variables name: Name, Country, Age,
Variables value:
Motaz, Sudan, 24,

This example should work with any number of parameters.

If you are know what parameters name you will pass you can directly access it's
value using the name such as:

var
AName, Country: string;
Age: Byte;
begin
AName:= Request.
Values['Name'];
Country:= Request.
Values['Country'];
Age:= StrToInt(Request.
Values['Age']);
....

Then you can add these fields to a database, or do any thing you want with it. The
most important thing that this data now are captured by your server application.


Sending data from HTML page

In real Internet pages users should not call your CGI applications directly such
as the method above, no one will write address like below:

http://localhost/cgi/para.exe?Name=Motaz&Country=Sudan&Age=24

If he did, he may miss some fields or write variable names wrongly. To avoid this
problem you must design a normal HTML page using any HTML editors such as FrontPage
Express and you can write some thing like this in front page:

What is the CGI
How can I build server side applications
How to set Paradox's master password at run time

This code will appear in the browser as:

What is the CGI
How can I build server side applications
How to set Paradox's master password at run time

When the user clicks at the first link he/she will send
Q=1 to FAQ.EXE and the CGI
understands that the user want to read question number 1 so it can displays it.

Sending data using data fields controls

The previous methos used to send fixed data, which the designer of the page want
to send it when the user clicks some links, but how can you let the user send it's
own data?

The answer is very simple, only you can follow below steps:

1- Run HTML editor, for example FrontPage Express
2- Drop three
Edit boxes, and a Submit button
3- A form will automatically be droped, right click this form then select
Form Properties
4- Click Settings, on Action edit box write Para.exe
5- At Method combo box select Get and click Ok
6- Right click first Edit box then select Form Field Properties
7- At Name edit box write (Name)
8- Repeat step 6 and 7 for the rest of fields, name them (
Age and Country)
9- Save this page at your CGI directory (in the same directory with Para.exe), name
it
Test.htm
10- Run the browser and write this address:

//localhost/cgi/Test.htm

Fill the fields then click submit or press enter, what did you say?

For example if you enter these data (
Motaz, 24, Sudan) you will see at Address bar
of the browser:

http://localhost/cgi/Para.exe?Name=Motaz&Age=24&Country=Sudan&B1=Submit

That mean when you use Get method all submitted fields will be displayed at Address
bar, so that can you send a password field using this method?
Sure you cann't, and the alternative of
Get method is Post method, but Post wouldn't
work with this example (
Para.dpr). The all things that you have to do is to replace QueryFields
property of
Request with ContentFields, and it should works with Post method, try
it and see the difference. The result is that the fields will not be displayed any
more at
Address bar of the browser, so that it is more suitable to send sensitive
data such as passwords. Moreover by using
Post method you can send alot of data such
as memos, but in
Get method the amount of parameters are limited.